From: Jonas Dreßler Date: Wed, 9 Mar 2022 09:14:42 +0000 (+0100) Subject: workspace: Force creating new layout when there's no allocation yet X-Git-Tag: archive/raspbian/50.5-1+rpi1~1^2~480^2^2~94 X-Git-Url: https://dgit.raspbian.org/%22http://www.example.com/cgi/%22/%22http:/www.example.com/cgi/%22?a=commitdiff_plain;h=b17f00cfb1196946232b9733e315cb91f27cbb26;p=gnome-shell.git workspace: Force creating new layout when there's no allocation yet Commit ba23279f1fd3820fb81570b1b4a03048e5a7a3bc was aimed at fixing a bug where the layout is frozen so early that we don't have an existing one to re-use, because no allocation cycle happened yet. It tried to fix that by forcing the creation of a layout when needsLayout === true, this turned out to be a bit too much, as it also forced creating a new layout when the layout was frozen after closing a window (which would set needsLayout to true). To fix this regression and still avoid reintroducing the bug the previous commit fixed, tighten the check a bit and only force creating the new layout when there's no allocation yet. This makes freezing the layout after closing a window work again. Part-of: --- diff --git a/js/ui/workspace.js b/js/ui/workspace.js index ebf3d9ba3..60e0d44a8 100644 --- a/js/ui/workspace.js +++ b/js/ui/workspace.js @@ -628,7 +628,6 @@ var WorkspaceLayout = GObject.registerClass({ const [containerWidth, containerHeight] = containerBox.get_size(); const containerAllocationChanged = this._lastBox === null || !this._lastBox.equal(containerBox); - this._lastBox = containerBox.copy(); // If the containers size changed, we can no longer keep around // the old windowSlots, so we must unfreeze the layout. @@ -665,7 +664,7 @@ var WorkspaceLayout = GObject.registerClass({ } let layoutChanged = false; - if (!this._layoutFrozen || this._needsLayout) { + if (!this._layoutFrozen || !this._lastBox) { if (this._needsLayout) { this._layout = this._createBestLayout(this._workarea); this._needsLayout = false; @@ -765,6 +764,8 @@ var WorkspaceLayout = GObject.registerClass({ child.allocate(childBox); } } + + this._lastBox = containerBox.copy(); } _syncOverlay(preview) {